import { resolve } from 'path';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import { prismjsPlugin } from 'vite-plugin-prismjs';

export default ({ mode }) => {
  const env = loadEnv(mode, process.cwd());
  const proxyPrefix = env.VITE_APP_PROXY_PREFIX;
  const publicPath = env.VITE_APP_BASE ? env.VITE_APP_BASE : '/';
  const outputDir = env.VITE_OUTPUT_DIR ? env.VITE_OUTPUT_DIR : 'dist';
  const serverPort = env.VITE_APP_PORT ? env.VITE_APP_PORT : 3003;

  return defineConfig({
    plugins: [
      vue(),
      vueJsx(),
      prismjsPlugin({
        languages: ['html', 'css', 'markup', 'javascript', 'php', 'dart', 'bash', 'nginx', 'sql'], // 语言 all:所有语言
        plugins: ['line-numbers', 'show-language', 'copy-to-clipboard', 'inline-color', 'line-highlight'], // 插件
        theme: 'okaidia', // 主题 coy|twillight|tomorrow|solarizedlight|okaidia|funky|dark
        css: true,
      }),
    ],
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
        '@cps': resolve(__dirname, 'src/components'),
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
      },
    },

    server: {
      open: env.VITE_OPEN, // 开发服务器启动时，自动在浏览器中打开应用程序
      host: '0.0.0.0',
      // port: env.VITE_APP_PORT || process.env.port,
      port: serverPort,
      proxy: {
        [proxyPrefix]: {
          target: `http:${env.VITE_API_BASE_URL}`,
          changeOrigin: true,
          ws: true,
          toProxy: true,
          rewrite: path => path.replace(new RegExp(`^${proxyPrefix}`), ''),
        },
      },
    },
    build: {
      chunkSizeWarningLimit: 1500,
      // rollupOptions: {
      //   output: {
      //     manualChunks(id) {
      //       if (id.includes('node_modules')) {
      //         return id.toString().split("node_modules/")[1].split("/")[0].toString();
      //       }
      //     }
      //   }
      // }
      outDir: outputDir, // 当运行 vue-cli-service build 时生成的生产环境构建文件的目录
      assetsDir: 'assets', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
    },
    root: process.cwd(),
    base: publicPath, // 开发或生产环境服务的公共基础路径
    publicDir: 'public', // 用于存放静态资源服务的文件夹，该目录在文件开发期间在根目录处，在构建后，将会复制到outDir的根目录
  });
}
